/*
 * Grid.h
 *
 *  Created on: Jun 2, 2011
 *      Author: wilsok17
 */

#include <map>
#include <set>
#include <string>
#include <utility>
#include "DataObjects.h"
using namespace std;

#ifndef GRID_H_
#define GRID_H_

class Grid {
private:
	map<string, set<pair<string, DIRECTION> > > grid;
public:
	Grid();
	void addTwoWayEdge(string node1, pair<string, DIRECTION> node2);
	void addOneWayEdge(string node1, pair<string, DIRECTION> node2);
	void removeTwoWayEdge(string node1, pair<string, DIRECTION> node2);
	void removeOneWayEdge(string node1, pair<string, DIRECTION> node2);
	set<pair<string, DIRECTION> > getAdjacent(string node);
	DIRECTION getOppositeDirection(DIRECTION dir);
	string directionToString(DIRECTION d);
	void print();
	virtual ~Grid();
};

#endif /* GRID_H_ */
